package com.gsbelarus.gedemin.salary.fragment.payslip;

import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;

import com.astuetz.PagerSlidingTabStrip;
import com.gsbelarus.gedemin.lib.ui.activity.SyncActivityModel;
import com.gsbelarus.gedemin.lib.ui.fragment.FragmentModel;
import com.gsbelarus.gedemin.salary.R;
import com.gsbelarus.gedemin.salary.adapter.PayslipViewPagerAdapter;
import com.gsbelarus.gedemin.salary.util.CurrencyHelper;

public class PayslipFragment extends FragmentModel implements
        CurrencyHelper.OnCurrencySwitcherChanged {

    private PayslipViewPagerAdapter adapter;

    private CurrencyHelper currencyHelper;

    /**
     * @return id View для отрисовки в фрагменте
     */
    @Override
    public int getViewResource() {
        return R.layout.payslip;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getSyncActivity().showElevationToolbar(false);

        setReloadViewByChangingOrientation(false);
        setHasOptionsMenu(true);

        currencyHelper = CurrencyHelper.getInstance(context);
        currencyHelper.addOnCurrencySwitcherChanged(this);
    }

    /**
     * Вызывается при создании View или при смене ориентации экрана.
     * Может быть переопределен в классе наследнике
     *
     * @param rootView корневое View
     */
    @Override
    public void onCreateViewFragment(View rootView) {
        super.onCreateViewFragment(rootView);

        ViewPager viewPager = (ViewPager) rootView.findViewById(R.id.payslip_viewpager);
        PagerSlidingTabStrip tabStrip = (PagerSlidingTabStrip) rootView.findViewById(R.id.payslip_viewpager_title_strip);
        adapter = new PayslipViewPagerAdapter(context, getChildFragmentManager());
        if (isContainsParams())
            adapter.setParams(argumentsHelper);

        viewPager.setOffscreenPageLimit(5);
        viewPager.setAdapter(adapter);
        tabStrip.setViewPager(viewPager);
        viewPager.setCurrentItem(0);
    }

    /**
     * Чтение данных из БД в новом потоке
     */
    @Override
    public void readDataBase() {

    }

    /**
     * Метод вызывается после чтения данных из БД или при смене ориентации экрана.
     * Может быть вызван до окончания выполнения потока для запроса данных из БД, поэтому следует проверять данные на null.
     * Служит для инициализации View данными
     *
     * @param rootView корневое View
     */
    @Override
    public void initView(View rootView) {
        if (adapter != null)
            adapter.notifyDataSetChanged();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        currencyHelper.removeOnCurrencySwitcherChanged(this);
    }

    @Override
    public void onChanged(CurrencyHelper.Kind kind) {
        if (adapter != null)
            adapter.notifyDataSetChanged();
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.currency_switcher, menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_currency_switch:
                currencyHelper.showChoiceDialog(getActivity(), null);
                break;
        }
        return super.onOptionsItemSelected(item);
    }

    public SyncActivityModel getSyncActivity() {
        return (SyncActivityModel) getActivity();
    }
}
